str(dat)
Classes ‘data.table’ and 'data.frame':  196 obs. of  41 variables:
 $ rank         : int  1 NA NA NA 45 NA 95 17 87 73 ...
 $ bib          : int  1 2 3 4 5 6 7 8 9 10 ...
 $ name         : chr  "SAGAN Peter" "BASKA Erik" "CANECKY Marek" "KOLAR Michal" ...
 $ nat          : chr  "SVK" "SVK" "SVK" "SVK" ...
 $ Lead In time : chr  "+7:55" "+7:55" "+7:55" "+7:55" ...
 $ Lead In pos  : int  85 99 36 119 179 123 117 88 92 20 ...
 $ Lead In speed: num  37.6 37.6 37.6 37.6 37.6 ...
 $ Lap2 time    : chr  "+6:31" "+6:31" "+6:31" "+6:31" ...
 $ Lap2 pos     : int  77 159 71 85 130 143 19 66 95 17 ...
 $ Lap2 speed   : num  38.2 38.2 38.2 38.2 38.2 ...
 $ Lap3 time    : chr  "+5:55" "+5:55" "+5:55" "+5:55" ...
 $ Lap3 pos     : int  116 180 30 181 155 152 132 80 82 18 ...
 $ Lap3 speed   : num  38.4 38.4 38.4 38.4 38.4 ...
 $ Lap4 time    : chr  "+4:44" "+4:44" "+4:44" "+4:44" ...
 $ Lap4 pos     : int  95 33 35 96 99 145 140 73 90 17 ...
 $ Lap4 speed   : num  38.7 38.7 38.7 38.7 38.7 ...
 $ Lap5 time    : chr  "+4:36" "+4:36" "+4:36" "+4:36" ...
 $ Lap5 pos     : int  90 153 147 135 179 154 163 84 190 17 ...
 $ Lap5 speed   : num  39 39 39 39 39 ...
 $ Lap6 time    : chr  "+3:06" "+3:06" "+3:06" "+3:06" ...
 $ Lap6 pos     : int  81 128 60 78 163 129 119 46 114 127 ...
 $ Lap6 speed   : num  39.2 39.2 39.2 39.2 39.2 ...
 $ Lap7 time    : chr  "+2:43" "+2:43" "+2:43" "+2:43" ...
 $ Lap7 pos     : int  106 137 107 102 133 141 26 20 30 25 ...
 $ Lap7 speed   : num  39.4 39.4 39.4 39.4 39.4 ...
 $ Lap8 time    : chr  "+0" "+0" "+0" "+0" ...
 $ Lap8 pos     : int  142 147 119 140 160 179 15 19 23 13 ...
 $ Lap8 speed   : num  40 40 40 40 40 ...
 $ Lap9 time    : chr  "+43" "+43" "+43" "+43" ...
 $ Lap9 pos     : int  99 125 146 151 152 NA 32 46 53 31 ...
 $ Lap9 speed   : num  40.3 40.3 40.3 40.3 40.3 ...
 $ Lap10 time   : chr  "+35" "+9:59" "+9:59" "+1:34" ...
 $ Lap10 pos    : int  80 151 152 139 96 NA 27 30 49 21 ...
 $ Lap10 speed  : num  40.6 39.5 39.5 40.5 40.6 ...
 $ Lap11 time   : chr  "+0" "" "" "+7:19" ...
 $ Lap11 pos    : int  58 NA NA 134 62 NA 75 17 93 4 ...
 $ Lap11 speed  : num  41 NA NA 40.2 41 ...
 $ Finish time  : chr  "6:28:11" "" "" "" ...
 $ Finish pos   : int  1 NA NA NA 45 NA 95 17 87 73 ...
 $ Finish speed : num  41.3 NA NA NA 41.1 ...
 $ V41          : logi  NA NA NA NA NA NA ...
 - attr(*, ".internal.selfref")=<externalptr> 

Wide format, let’s melt for lap positions and speed

(pplotly <- ggplotly(country_pos))
We recommend that you use the dev version of ggplot2 with `ggplotly()`
Install it with: `devtools::install_github('hadley/ggplot2')`
replacing previous import by ‘shiny::includeHTML’ when loading ‘crosstalk’replacing previous import by ‘shiny::knit_print.shiny.tag’ when loading ‘crosstalk’replacing previous import by ‘shiny::code’ when loading ‘crosstalk’replacing previous import by ‘shiny::includeScript’ when loading ‘crosstalk’replacing previous import by ‘shiny::includeMarkdown’ when loading ‘crosstalk’replacing previous import by ‘shiny::tags’ when loading ‘crosstalk’replacing previous import by ‘shiny::is.singleton’ when loading ‘crosstalk’replacing previous import by ‘shiny::withTags’ when loading ‘crosstalk’replacing previous import by ‘shiny::img’ when loading ‘crosstalk’replacing previous import by ‘shiny::tagAppendAttributes’ when loading ‘crosstalk’replacing previous import by ‘shiny::knit_print.shiny.tag.list’ when loading ‘crosstalk’replacing previous import by ‘shiny::knit_print.html’ when loading ‘crosstalk’replacing previous import by ‘shiny::tagAppendChild’ when loading ‘crosstalk’replacing previous import by ‘shiny::includeCSS’ when loading ‘crosstalk’replacing previous import by ‘shiny::br’ when loading ‘crosstalk’replacing previous import by ‘shiny::singleton’ when loading ‘crosstalk’replacing previous import by ‘shiny::span’ when loading ‘crosstalk’replacing previous import by ‘shiny::a’ when loading ‘crosstalk’replacing previous import by ‘shiny::tagList’ when loading ‘crosstalk’replacing previous import by ‘shiny::strong’ when loading ‘crosstalk’replacing previous import by ‘shiny::tag’ when loading ‘crosstalk’replacing previous import by ‘shiny::p’ when loading ‘crosstalk’replacing previous import by ‘shiny::validateCssUnit’ when loading ‘crosstalk’replacing previous import by ‘shiny::HTML’ when loading ‘crosstalk’replacing previous import by ‘shiny::h1’ when loading ‘crosstalk’replacing previous import by ‘shiny::h2’ when loading ‘crosstalk’replacing previous import by ‘shiny::h3’ when loading ‘crosstalk’replacing previous import by ‘shiny::h4’ when loading ‘crosstalk’replacing previous import by ‘shiny::h5’ when loading ‘crosstalk’replacing previous import by ‘shiny::h6’ when loading ‘crosstalk’replacing previous import by ‘shiny::tagAppendChildren’ when loading ‘crosstalk’replacing previous import by ‘shiny::em’ when loading ‘crosstalk’replacing previous import by ‘shiny::div’ when loading ‘crosstalk’replacing previous import by ‘shiny::pre’ when loading ‘crosstalk’replacing previous import by ‘shiny::htmlTemplate’ when loading ‘crosstalk’replacing previous import by ‘shiny::suppressDependencies’ when loading ‘crosstalk’replacing previous import by ‘shiny::tagSetChildren’ when loading ‘crosstalk’replacing previous import by ‘shiny::includeText’ when loading ‘crosstalk’replacing previous import by ‘shiny::hr’ when loading ‘crosstalk’

Coolio Let’s look at where the podium finishers did compared to their team

top 20 movement

api_create(pplotly, filename = "WC top 20 box plot", sharing="public")
Found a grid already named: 'WC top 20 box plot Grid'. Since fileopt='overwrite', I'll try to update it

Let’s look at canada vs usa

Ok we need a joy plot

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZ2dyaWRnZXMpCmxpYnJhcnkoZGF0YS50YWJsZSkKbGlicmFyeShwbG90bHkpCmRhdCA9IGZyZWFkKCd3YzIwMTdzcGxpdHMuY3N2JykKc3RyKGRhdCkKYGBgCmBgYHtyfQpkYXQgJT4lIGZpbHRlcihuYW1lPT0nTUFUVEhFV1MgTWljaGFlbCcpCmBgYAoKV2lkZSBmb3JtYXQsIGxldCdzIG1lbHQgZm9yIGxhcCBwb3NpdGlvbnMgYW5kIHNwZWVkCmBgYHtyfQpwb3NpdGlvbnMgPSBtZWx0KGRhdCwgaWQudmFycz1jKCdiaWInLCduYW1lJywgJ25hdCcpLG1lYXN1cmU9YygnTGVhZCBJbiBwb3MnLCAnTGFwMiBwb3MnLCAnTGFwMyBwb3MnLCAnTGFwNCBwb3MnLCAgJ0xhcDUgcG9zJywgJ0xhcDYgcG9zJywgJ0xhcDcgcG9zJywgICdMYXA4IHBvcycsICAnTGFwOSBwb3MnLCAgJ0xhcDExIHBvcycsICAnRmluaXNoIHBvcycpLCB2YXJpYWJsZS5uYW1lPSdsYXAnLCB2YWx1ZS5uYW1lPSdwb3NpdGlvbicpCmNvdW50cnlfcG9zID0gcG9zaXRpb25zICU+JSAKZ2dwbG90KCkgKyBnZW9tX2xpbmUoYWVzKHg9bGFwLCB5PXBvc2l0aW9uLCBncm91cD1iaWIsIGNvbG91cj1uYXQpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwLCB2anVzdD0wLjUsIHNpemU9OCksIHBhbmVsLmJhY2tncm91bmQ9ZWxlbWVudF9ibGFuaygpLApwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpLCBheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3VyID0gImJsYWNrIikpICsgCiAgc2NhbGVfeV9yZXZlcnNlKCBsaW09YygyMDAsMCkpCgoocHBsb3RseSA8LSBnZ3Bsb3RseShjb3VudHJ5X3BvcykpCmFwaV9jcmVhdGUocHBsb3RseSwgZmlsZW5hbWUgPSAiV0MgMjAxNyBieSBjb3VudHJ5Iiwgc2hhcmluZz0icHVibGljIikKYGBgCkNvb2xpbwpMZXQncyBsb29rIGF0IHdoZXJlIHRoZSBwb2RpdW0gZmluaXNoZXJzIGRpZCBjb21wYXJlZCB0byB0aGVpciB0ZWFtCmBgYHtyfQpwb3NpdGlvbnMgJT4lIAogIGZpbHRlcihuYXQgJWluJSBjKCdBVVMnLCAnU1ZLJywgJ05PUicpKSAlPiUKZ2dwbG90KCkgKyBnZW9tX2xpbmUoYWVzKHg9bGFwLCB5PXBvc2l0aW9uLCBncm91cD1iaWIsIGNvbG91cj1uYXQpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwLCB2anVzdD0wLjUsIHNpemU9NykpICsgCiAgc2NhbGVfeV9yZXZlcnNlKCBsaW09YygyMDAsMCkpICsKICBnZ3RpdGxlKCdBVVMsIE5PUiwgU1ZLIHJpZGVyIHBvc2l0aW9ucycpCiAgZ2VvbV9saW5lKGRhdGE9cG9zaXRpb25zW3Bvc2l0aW9uc1ssYmliPT0xXV0sIGFlcyhsYXAsIHBvc2l0aW9uLCBncm91cD1iaWIpLCBzaXplPTEuNCkKYGBgCgp0b3AgMjAgbW92ZW1lbnQKYGBge3J9CnRvcDEwID0gcG9zaXRpb25zICU+JSBmaWx0ZXIobGFwID09ICJGaW5pc2ggcG9zIiAmIHBvc2l0aW9uIDw9IDEwKSAlPiUgc2VsZWN0KGJpYikKcCA9IHBvc2l0aW9ucyAlPiUgCiAgZmlsdGVyKGJpYiAlaW4lIHRvcDIwKSAlPiUKICBnZ3Bsb3QoKSArIGdlb21fbGluZShhZXMoeD1sYXAsIHk9cG9zaXRpb24sIGdyb3VwPWJpYiwgY29sb3VyPW5hbWUpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwLCB2anVzdD0wLjUsIHNpemU9NykpICsgCiAgZ2d0aXRsZSgnVG9wIDIwIGZpbmlzaGVycycpICsgCiAgc2NhbGVfeV9yZXZlcnNlKCBsaW09YygyMDAsMCkpICsKICBnZW9tX2xpbmUoZGF0YT1wb3NpdGlvbnNbcG9zaXRpb25zWyxiaWI9PTFdXSwgYWVzKGxhcCwgcG9zaXRpb24sIGdyb3VwPWJpYiksIHNpemU9MS4zKQoocHBsb3RseSA8LSBnZ3Bsb3RseShwKSkKYXBpX2NyZWF0ZShwcGxvdGx5LCBmaWxlbmFtZSA9ICJXQyB0b3AgMjAgYm94IHBsb3QiLCBzaGFyaW5nPSJwdWJsaWMiKQpgYGAKTGV0J3MgbG9vayBhdCBjYW5hZGEgdnMgdXNhCmBgYHtyfQpwb3NpdGlvbnMgJT4lIAogIGZpbHRlcihuYXQgJWluJSBjKCdDQU4nLCAnVVNBJykpICU+JQpnZ3Bsb3QoKSArIGdlb21fbGluZShhZXMoeD1sYXAsIHk9cG9zaXRpb24sIGdyb3VwPWJpYiwgY29sb3VyPW5hbWUpKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggID0gZWxlbWVudF90ZXh0KGFuZ2xlPTkwLCB2anVzdD0wLjUsIHNpemU9NykpICsgCiAgc2NhbGVfeV9yZXZlcnNlKCBsaW09YygyMDAsMCkpICsKICBnZ3RpdGxlKCdDYW5hZGEgdnMgVVNBJykKYGBgCgpPayB3ZSBuZWVkIGEgam95IHBsb3QKYGBge3J9CmdncGxvdChwb3NpdGlvbnMsIGFlcyh4ID0gcG9zaXRpb24sIHkgPSBsYXAsIGZpbGw9bmF0KSkgKyAKICBnZW9tX2RlbnNpdHlfcmlkZ2VzKHNjYWxlID0gNSkgKwogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTIpICsKICBnZ3RpdGxlKCdXQzIwMTc6IEpveXBsb3QgQ0FOIHZzIFVTQScpICsgCiAgc2NhbGVfeF9jb250aW51b3VzKGV4cGFuZCA9IGMoMC4wMSwgMCkpICsKICBzY2FsZV95X2Rpc2NyZXRlKGV4cGFuZCA9IGMoMC4wMSwgMCkpCgpgYGAKCg==